package mysql

import (
	"CampusCloudAid/models"
	"errors"
	"fmt"
	"time"

	"gorm.io/gorm"

	"go.uber.org/zap"
)

func CreateWorkOrders(p *models.CreateWorkOrders) (err error) {

	res := Conn.Debug().Create(&p).Error
	if res != nil {

		zap.L().Error("DB.Create(&p).Error", zap.Error(err))
		fmt.Println("-------", zap.Error(err))
		return
	}
	return
}

// 任务从已接收变成异常时调用这个方法
// 传入工单id和前端输入的状态就可以修改整个异常过程；
// 后端修改工单状态；
func ModifyWorkOrder(orderID int64, newStatus string) error {
	// 查询工单信息
	var order models.CreateWorkOrders
	if err := Conn.Where("id = ?", orderID).First(&order).Error; err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return errors.New("工单信息不存在")
		}
		return err
	}

	// 更新工单状态
	order.Status = newStatus
	if err := Conn.Save(&order).Error; err != nil {
		return err
	}

	// 获取任务信息
	var task models.Tasks
	if err := Conn.Where("id = ?", order.TaskId).First(&task).Error; err != nil {
		return err
	}
	// 调用处理钱包变化的方法
	err := TaskAbnormalMoney(task.ReceiverId, task.PublisherId, task.PaymentFee, newStatus)
	if err != nil {
		return err
	}
	// 更新任务状态为已完成
	task.TaskStatus = "已完成"
	task.EndTime = time.Now()
	task.SystemConfirmTime = time.DateTime

	if err := Conn.Model(&task).Updates(map[string]interface{}{
		"publisher_id":        task.PublisherId,
		"task_name":           task.TaskName,
		"payment_fee":         task.PaymentFee,
		"task_content":        task.TaskContent,
		"task_type":           task.TaskType,
		"task_status":         task.TaskStatus,
		"publish_time":        task.PublishTime,
		"receiver_id":         task.ReceiverId,
		"receiver_time":       task.ReceiverTime,
		"completion_image":    task.CompletionImage,
		"end_time":            task.EndTime,
		"system_confirm_time": task.SystemConfirmTime,
		"is_after_sale":       task.IsAfterSale,
		//"notification":     task.Notification,
		//"completion_time_minutes": task.CompletionTimeMinutes,
		//"update_time":      task.UpdateTime,
	}).Error; err != nil {
		return err
	}
	// 保存流水记录到数据库
	moneyFlow := models.MoneyFlow{
		FromUserID:  task.PublisherId, // 任务发起人id
		ToUserID:    task.ReceiverId,  // 任务接收者id
		Amount:      task.PaymentFee,  // 任务金额
		ArrivalTime: time.Now(),       // 当前时间
		Status:      "任务转账",           // 充值状态
		TaskID:      task.Id,          // 任务的ID
	}
	err = CreateFlow(moneyFlow)
	if err != nil {
		return err
	}
	return nil
}

//任务从已提交待确认变成异常时调用这个方法
